这是我第一篇研报类型的文章,之前的文章都是分析某一个具体的项目,这次想试着讲讲更宏大也是我更不擅长的领域,同时也把我之前零散发在twitter上的内容结构化整理成一篇文章。web3一直是一个概念新词满天飞的领域,所以我斗胆用一篇文章来尝试为大家讲讲我所理解的Layer0、1、2,也许你会疑惑为什么标题不叫《一文讲清楚Layer0、1、2》呢,一方面是因为我没有自信和实力可以讲清楚,另一方面是其中很多定义到目前也很模糊没有行业标准,比如在我的视角里Celestia属于Layer0,但是也有很多说法它属于Layer1,所以本文均为站到个人视角的理解,可能存在不全面或者与你的观点不一致的情况,欢迎探讨。 Layer0是我认为目前行业对其定义最模糊也是理解最复杂的一层,所以我会多花一些时间讲解。很多人将Layer0定义为区块链基础设施服务层,但我觉得这个概念还是太大太粗了,我目前认为Layer0的关键词就是发链、多链与跨链,核心内容落在了跨链通信与模块化区块链,所以讲清楚了跨链通信和模块化区块链,Layer0的内容也就基本覆盖了。
先说说跨链通信,注意跨链通信和跨链不一样,跨链通信是一个技术实现,跨链则是一个业务场景。
跨链是区块链极其重要的能力,假设每条链都是一个银行,如果区块链无法跨链则等于无法实现银行转账。 我们常说的跨链是指资产跨链,即我想把A链的aToken跨到B链,首先token的项目方需要在两条链上都发行自己的原生token,然后使用跨链桥来进行两边token的“转移”,转移打引号的原因是转移的过程并不是我们所理解的从A移动到B,其工作原理是将A链的aToken锁定,然后再在B链铸造对应数量的bToken,至于A链锁定资产,到B链铸造资产这个中间的过程则会产生很多问题,主要就是通信的问题,A链如何通知B链“张三刚才在我这里锁定了20个aToken,你现在赶紧的给他弄20个bToken出来”呢,链本身是封闭的情况下只能通过链下的监控比如我写个脚本之类的来连接两条链的资产变化情况,首先这不够native,其次这也不够安全,所以跨链桥经常出问题,跨链通信则是主要解决多链之间原生信息传输的问题。
专注于做跨链通信的LayerZero协议我之前也写过一篇与它相关的文章《那个可以跨链的Gh0stlyGh0sts会成为下一个Azuki吗?》,这也是第一个使用LayerZero实现原生跨链通信从而达到NFT资产跨链效果的项目。
刚才说到传统的跨链桥是通过链下监控两条链的方式来实现了伪通信,而并不是真正的两条链产生了信息传递,如下图中左边和中间的模式,LayerZero则是直接在两条链里面部署了自己的节点,这些节点完成了多链之间的通信。 如下图所示,我可以直接在合约代码里写清楚我要给哪条链(chainId)传输什么信息过去,这是区块链原生的跨链通信。 我非常看好LayerZero这个协议,它也完成了红杉领投的1.35亿美金融资,看好的原因就是这是真正纯原生的跨链解决方案,并且资产跨链只是它的一个应用业务场景,链和链之间的通信不仅限于资产,就像是银行之间的通信也不仅限于转账,我在工行产生了坏账信誉不好,则工行可以将该消息告诉建行,我在建行贷款就会出现问题,跨链通信背后的业务场景一定会可以挖出很多。 讲完了LayerZero后Layer0主要的内容跨链通信就明白了,这里要注意的是Layer0是概念,LayerZero则是这个概念里的具体某个协议,这两个不要搞混了。 Layer0还有一个重要的内容模块化区块链,跨链通信这个词大家能够理解确实还挺底层的属于Layer0,但模块化区块链这个词大家乍一听会觉得非常“大”不像是一个Layer即层的概念,而是一个“全套”。 首先确实如果从广义的概念来说模块化区块链是一种“架构”,layer2也是模块化区块链,将计算层模块化抽象出来,但是从目前狭义的对于模块化区块链的定位来说,我们要明白将区块链模块化以后的目的是什么,从而再定义其处在哪一层,我认为最直接的目的是在于如何能够更简单快速的去发一条链出来,模块化的效果是能够把区块链技术架构拆的更清晰,封装的更完整,然后开箱即用就像是搭积木一样,可以直接使用模块化区块链的能力用更低的成本发一套新链出来,你可以粗糙的理解成模块化区块链的目的是发一条Layer1出来,这样是不是就理解为什么它处在Layer0了。 模块化区块链的两个代表Cosmos和Celestia为大家进行展开介绍从而更清晰的理解其含义,其中Cosmos要感谢@Kasey_ibc,他是Cosmos生态的深度贡献者,与他进行了探讨并研究了其twitter优质内容。 模块化区块链概念的提出者是Celestia,我之前关于模块化区块链曾经发过一个分析twitter,这里我援引该twitter的内容讲讲Celestia,具体的内容大家可以看我当时的twitter:https://twitter.com/jason_chen998/status/1561576592337682434 可以看到官网对于其优势第一点就是像智能合约一样轻松部署区块链,降低发链的门槛和成本。 模块化区块链的对立面是目前大多数Layer1都属于单体区块链,也就是一条链承担了共识、数据可用性和执行的工作。共识就是整个网路中节点决定打包哪些交易,以什么顺序打包,数据可用性就是验证某个区块是已经完成广播是写入链上的,执行则就是具体交易和状态的变更。如果一条链把这三件事都干了,那它就是单体区块链,也就是目前L1面临的问题,交易、结算、出块都排着队完成。所以设计思路就是把共识、数据可用性和执行这几个区块链核心工作职责给拆开,每个职责单独做一条链即一层,然后各司其职干好自己的事,再将其拼装组合到一起。 说到这里大家应该就意识到了,这就是30年软件开发都遵循的模块化设计原则,封装多态耦合内聚那套理念,把一个复杂系统拆分职能,各干各的,再组装到一起,所以至少这条顶层设计理念是一直存在的,将这套设计理念应用在了区块链设计上,并不是什么很新颖的理念。 然后当说到将共识、数据可用性、执行拆分出来成为一条链,大家应该意识到这就是L2在做的事,rollup扩容思路就是将执行层单独拿出来做一条子链去完成以太坊的交易处理工作,然后将结果再返回至以太坊主链,所以rollup其实就是模块化设计理念,所以如上文所说广义的模块化区块链不是一个具体的东西,它是一种概念或者是设计理念,但狭义的模块化区块链则是指将区块链的共识、数据可用性的底层能力封装起来,这两层也是对于一条区块链的地基,复杂度和难度也是最高的,然后这两层能力具备了新发一条链就门槛和成本很低,只需要将精力关注于自己的业务与计算。 那么Celestia主要是将数据可用性能力模块化,通过共识机制存储交易记录并提供数据可用性,而不用参与结算和执行层的事,只管存,并保证存的东西是有效的,其他开发者就能以rollup的形式在 Celestia 上构建出自己的结算层和执行层。所以Celestia就像是区块链领域的AWS,传统一家公司开发软件需要买一台服务器放在机房,10家公司就要10台服务器,于是AWS说你们都别买了,我自己整一个大的,你们只管软件开发,需要存取数据就来我这,我能够保证你们的数据有效的(存的进来,取得出去)。 那么为什么Celestia要做数据可用性层模块化呢?如果我想发一条链最难的就是这么让尽可能多的节点参与到我的链中去为我完成共识和数据可用性的过程,有这么多节点来维护我的链,那才能在链上做更多应用层执行的事情。 所以需要先看一下L1链的数据可用性是如何完成的。我们都知道区块链是由大量可自由加入的节点组成的,节点越多也就越安全,越去中心化。节点分为全节点和轻节点,全节点就是要完整的维护一套数据账本,所以少量节点恶意攻击不会影响全局节点,这也是区块链的立根之本。 但是随着时间数据也越来越多,维护一个全节点成本过高,如果大家都不愿意来做全节点那区块链就趋于中心化变得不安全,所以会有轻节点的存在,不会维护验证全量交易数据,而只存区块头,当出现需要验证数据可用性的时候,就将其发送给相邻全节点帮忙验证,然后再将结果返回回来。 所以总结一下,搞一个链最难的是这么能搞到这么多的节点来维护我这条链的共识和数据可用性。这也就是Celestia想解决的问题,它在官网说希望能够让创建一条链像创建智能合约一样简单,大家不用管下面的数据问题,交给Celestia完成,只需要专注于自己上层执行结算,实现“一键发链”的效果。 看完Celestia我们再看一下Cosmos,其实这两家组织的成员重合度很高,很多人都是同时贡献于这两家组织的。 Cosmos 的目标是成为区块链的互联网,首先它提供了一套“发链”能力,让每个社区都可以拥有一条自己的主权链,主权链即独立的区块链,数据的产生和写入都是内部闭环的,其次链之间可以进行数据通信交互,实现万链互联,这个愿景还是非常有感召力的。 至于为什么它认为有让社区发自己链的需求呢,是因为它将区块链分为公共链和专有链,在以太坊这样的公共链上开发者需要面对的两层治理,链和应用,并且应用要遵循受限于底层链,从而很难释放出应用的价值,所以它想针对于每个应用都可以产生一个量身定制的链。 所以为了达到这个目的首先要解决发一条新链门槛与成本的问题,其次解决这么多链之间如何通信形成一个滚雪球生态的问题。 门槛和成本Cosmos的解决思路与Celestia一致,即将底层的能力封装起来,区块链架构分为三个大层:网络、共识和应用,它将网络和共识层封装起来,也包括了账号、交易、签名等原子能力,提供了SDK使得开发人员基于此进行主权链的开发,通过预置好的模块来进行自定义构建区块链,然后发布到Cosmos网络中和其他的兄弟链进行交互,交互则是使用跨链通信协议IBC来实现了一个hub集线器的效果,其他的链都通过IBC连接到这个集线器中,在此进行数据中继。
所以Layer0的概念至此总结一下,其主要干的活集中在发链、多链和跨链这三层,让发链变得更简单,但发了这么多链互相不通那也无法形成合力,于是需要解决跨链的问题。
Layer1是底层区块链,熟知的比特币、以太坊、币安链都属于Layer1,以及Avalanche、Near和Terra等,因为它们都是自己生态系统中的主要网络,在自身区块链上处理并完成交易,同时也具备自己的原生token,最近新起的两大新公链Aptos和Sui也是Layer1,但是注意很多人容易把Layer1和公链混为一谈,公链包含Layer1但不是等于的关系。 Layer1公链是crypto世界中护城河最深的一个物种,当越来越多的节点、开发者、项目加入其生态后,滚雪球的优势将会非常明显,除非是出现了Luna之于Terra这样的基础代币直接崩盘,导致这个大雪球发生了大雪崩,否则生态内大量错综复杂的利益关系会互相牢牢绑定到一起,使得链的根会攀枝错节的扎的非常深,所以打造出来一条成功的Layer1公链一直是整个crypto圈子里无数组织前赴后继的。 目前应用领域最大的Layer1公链是以太坊,所以竞对链都会想办法从以太坊生态中争夺开发者与用户,因为以太坊这个贵族链在高峰期动辄数十美金的GAS费对于我这种普通小韭菜来说还是肉疼的不行,所以目前绝大多数的竞对链都主打低gas、高TPS的策略来争抢用户资源。
但是打造公链就像是打造一座城市,一座城市的繁荣需要的是先修建好住房、医院、商场、铁路等基础设施,打造宜居的环境,居民才会搬过来生活,如果一条链没有应用把用户抢过来也没用呀,所以公链吸引开发者的手段可以分为几种 1.公链给足开发者扶持,来我这里开发应用给钱给流量,所以这也就是为什么大量的公链背后都是交易所站台,得出得起钱呀,然后整天搞黑客松,发grants来招商引资。 2.新公链对于开发者来说最大的吸引力在于足够空白,因为成熟的以太坊竞争已经太激烈太卷了,去了新的公链甚至可以直接把以太坊上已经验证成功的应用直接照搬上去,比如最近大家应该看到sui上的NFT交易平台、域名服务商这些已经在以太坊滚瓜烂熟的东西依然拿到了大额融资,群里我看很多人戏称换个语言任何项目都能重新做一遍。
3.还有一个我认为行之有效的手段就是直接EVM以太坊虚拟机兼容,对于开发者来说最大的成本不是写代码,而是学代码,一种完全陌生的技术栈从零开始学起,然后实操开发,调试debug等等一套下来会劝退很多开发者,那有没有什么办法能够让以太坊生态的开发者可以顺滑的低成本迁移到新链上去呢?有没有办法我可以用mac电脑开发并调试运营windows的应用呢?安装一个虚拟机,大家应该身边也存在这样的朋友买个mac用的不顺手,给它改成windows系统,者其实就是运行了一个虚拟机,虚拟机就是用软件模拟计算机系统。EVM就是服务于以太坊的智能合约,所以如果使用EVM兼容对于开发者就可以直接顺滑的将以太坊的应用迁移到兼容链上去,大家熟知的BSC就是EVM兼容链。 再来聊聊Layer2,刚才说很多Layer1的竞争链瞄准以太坊贵和慢来打,但是对于以太坊本身有什么办法能够优化呢?Layer2是一种方式。 在讲Layer0部分的时候我聊到了单体链,一条链上将所有事都干了,这能不堵吗?这时有人想到了能不能把以太坊上的交易拿出来在外面执行,然后将结果返回给以太坊做数据可用性处理,这种操作方式被称为rollups,也泛称为Layer2,就像是原本一条路上非常堵,我给它修个高架桥,当然我还看到一种有趣的解释,做核酸10人混管就是rollups哈哈。 我之前读书时恰好研究方向也是区块链扩容,当时写的论文中提出的方案也和rollups异曲同工如下图所示。
刚才说到rollups就是将计算在链下执行再将结果放到链上的过程,这个过程最大的问题就是在于怎么证明这个结果是有效的,两种证明方式也就产生了两种主流的rollups方案:Optimistic rollups和zk rollups。
人如其名,Optimistic的英文含义是乐观的,即Optimistic rollups使用了欺诈证明作为数据有效性的验证方式,在将链下计算完的结果同步给以太坊主网后,会乐观的默认数据是正确的,如果有人认为数据不正确也就是存在欺诈,就可以在窗口期又称质询期内通过计算欺诈证明来质疑汇总交易的结果。
如果证明成功存在欺诈,则会重新执行交易更新数据状态,并且当时将该交易打包的排序节点就会受到惩罚,削减它提交的保证金(成为排序节点是需要缴纳保证金的),并分发给提交了欺诈证明的验证节点。
在这个过程中重要的角色除了两个节点:排序节点和验证节点外,还有另外两个重要的角色参与:CTC交易合约和SCC状态合约。
这里逻辑稍微有些复杂需要大家耐心理解,所有Optimism的交易数据区块都存储在以太坊一个特殊的被称为CanonicalTransactionChain的合约,简称 CTC,合约地址为0x5E4e65926BA27467555EB562121fac00D24E9dD2,可以看到排序节点Sequencer每分钟大约写入两批次(批次的专业术语叫Batch),每个批次可能包含几百笔交易数据,CTC合约主要存着的是交易数据摘要。
另外将交易后的状态根StateRoot存入StateCommitmentChain合约,简称SCC,合约地址为0xBe5dAb4A2e9cd0F27300dB4aB94BeE3A233AEB19,约每6分钟写入一批次,验证节点可以去读取这两个合约中的记录进行验证计算是否交易存在欺诈行为。
以上就是Optimistic证明数据有效性的方式,有点博弈学的感觉,通过双方对抗加激励模型实现最小程度作恶欺诈的效果,我们再看看ZK是如何解决的。
zkSync是zk rollups的主要玩家,它的官网slogen是rely on math, not validators,依赖数学,而不是验证者,这句话就是针对于Optimistic欺诈证明说的,可见对于Optimistic火药味满满啊。
zk rollups 中每一笔交易的有效性都是在交易发生前验证的。排序节点无法作恶。但是 Optimistic Rollup 中,排序节点的行为不受约束,因此必须存在验证节点去监视欺诈交易,一旦发现就需要向主网提交欺诈证明。
所以zk rollups相比于Optimistic rollups最大的好处在于因为使用零知识证明的纯数学计算来进行交易有效性验证,所以将资金转移至以太坊不会存在延迟,因为一旦zk rollup 合约完成了有效性证明,就会执行交易。相反从Optimistic rollups中提取资金会有所延迟,因为要为欺诈证明留出一定时间。
zk rollups的核心架构包括
1.链上合约:逻辑与Optimistic一样,在以太坊部署对应的智能合约用于存储区块汇总数据、验证合约等,但是不需要像Optimistic一样去发布太多交易数据在以太坊链上合约,因为其有效性在上链之前就已经得到了证明,而不是Optimistic需要将数据发到链上用于他人验证,但zk rollups也可以将交易数据存放在智能合约的calldata中,它是一种不可更改,但是不持久的临时存储区域,类似于内存,所以有需要也可以获取到交易数据。
2.链下虚拟机:虽然zk rollups依附于以太坊,但交易执行过程存在于独立的EVM虚拟机,即实际zk rollups执行的环境。
其在大流程上和Optimistic类似,用户签署交易后,提交给zk rollups的Layer2排序节点进行处理并打包在一个批次中,然后提交给以太坊。
zkSync使用的零知识证明太复杂了涉及到大量的加密数学,看的头大实在没理解透认怂了,所以这里就不班门弄斧复杂粘贴一些开发手册里我自己都看不懂的数学公式假装我看懂了。
以上就是我个人对于Layer0、1、2的研究与理解,还是一开始说到的Layer层的概念目前没有明确的统一界定,所以这篇文章均为我个人的理解分析,不代表官方立场,也肯定会存在一定程度的主观、偏差和不足,欢迎交流探讨,共同学习。
也欢迎关注我的twitter:@jason_chen998,有需要也可添加微信 cj350306878,请备注姓名、公司和目的,谢谢。
往期文章: